package com.hmall.item.web;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hmall.common.dto.ItemDTO;
import com.hmall.common.dto.PageDTO;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.IItemService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

@RestController
@RequestMapping("item")
public class ItemController {

    @Autowired
    private IItemService itemService;

    /**
     * 分页查询商品接口--商品管理
     *
     * @return
     */
    @GetMapping("/list")
    public PageDTO<Item> pageInfo(@RequestParam("page") Integer page, @RequestParam("size") Integer size) {
        //1 判断参数，给参数规定界值
        if (page <= 0 || page >= 500) {
            page = 1;
        }
        if (size <= 0 || size >= 50) {
            size = 10;
        }
        //2 查询数据库

        Page<Item> result = itemService.page(new Page<>(page,size));
        //3 封装查询的数据
//        PageDTO<Item> itemPageDTO = new PageDTO<>();
//        itemPageDTO.setTotal(result.getTotal());
//        itemPageDTO.setList(result.getRecords());
        return new PageDTO<>(result.getTotal(),result.getRecords());
    }

    /**
     * 根据id查询商品--商品管理
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public ItemDTO findById(@PathVariable("id") Long id){
        Item item = itemService.getById(id);
        ItemDTO itemDTO = new ItemDTO();
        BeanUtils.copyProperties(item,itemDTO);
        return itemDTO;
    }
    /**
     * 根据id删除商品--商品管理
     *
     * @param id
     */
    @DeleteMapping("/{id}")
    public void deleteCommodity(@PathVariable("id") Long id) {
//        boolean b = itemService.removeById(id);
        itemService.removeById(id);
//        System.out.println("删除商品结果："+b);
    }

    /**
     * 新增商品--商品管理
     *
     * @param item
     */
    @PostMapping
    public void addCommodity(@RequestBody Item item) {
//        item.setCreateTime(LocalDateTime.now());
//        item.setUpdateTime(LocalDateTime.now());
//        boolean save = itemService.save(item);
        itemService.save(item);
//        System.out.println("商品添加结果：" + save);
    }

    /**
     * 修改商品--商品管理
     *
     * @param item
     */
    @PutMapping
    public void updateCommodity(@RequestBody Item item) {
//        item.setCreateTime(LocalDateTime.now());
//        item.setUpdateTime(LocalDateTime.now());
//        boolean b = itemService.updateById(item);
        //修改商品时，需要将状态status清空，防止页面传递错误的状态值
        item.setStatus(null);
        itemService.updateById(item);
//        System.out.println("商品编辑结果：" + b);
    }

    /**
     * 商品上架、下架--商品管理
     * @param id 商品id
     * @param status 商品状态
     */
    @PutMapping("/status/{id}/{status}")
    public void commodityUpOrDown(@PathVariable("id") Long id,@PathVariable("status") Integer status) {
        //判断状态值是否为空
        if (status < 1 || status > 2){
            throw  new RuntimeException("参数异常！");
        }
        itemService.updateDownOrUp(id,status);
    }

//    @DeleteMapping("{id}")
//    public void deleteItemById(@PathVariable("id") Long id) {
//        itemService.removeById(id);
//    }

    @PutMapping("/stock/{itemId}/{num}")
    public void updateStock(@PathVariable("itemId") Long itemId, @PathVariable("num") Integer num){
        itemService.deductStock(itemId, num);
    }
}
